JavaScriptã®åŒ·åãªæ°ã¡ãœãã`Iterator.prototype.every`ã解説ãã¡ã¢ãªå¹çã®è¯ããã®ãã«ããŒããã¹ããªãŒã ãå€§èŠæš¡ããŒã¿ã»ããã®æ®éçæ¡ä»¶ãã§ãã¯ãããã«ç°¡çŽ åããããå®è·µäŸã亀ãåŠã³ãŸãã
JavaScriptã®æ°ããªã¹ãŒããŒãã¯ãŒïŒãŠãããŒãµã«ã¹ããªãŒã æ¡ä»¶ã®ããã®'every'ã€ãã¬ãŒã¿ãã«ããŒ
é²åãç¶ããçŸä»£ã®ãœãããŠã§ã¢éçºã®äžçã§ã¯ãç§ãã¡ãæ±ãããŒã¿ã®èŠæš¡ã¯çµ¶ããå¢å€§ããŠããŸãããªã¢ã«ã¿ã€ã åæããã·ã¥ããŒããWebSocketã¹ããªãŒã ãåŠçããããšããããµãŒããŒãµã€ãã¢ããªã±ãŒã·ã§ã³ã巚倧ãªãã°ãã¡ã€ã«ãè§£æããããšãŸã§ãããŒã¿ã·ãŒã±ã³ã¹ãå¹ççã«ç®¡çããèœåã¯ãããŸã§ä»¥äžã«éèŠã«ãªã£ãŠããŸããé·å¹ŽãJavaScriptéçºè ã¯`Array.prototype`ã§å©çšå¯èœãªè±å¯ãªå®£èšçã¡ãœããâ`map`ã`filter`ã`reduce`ã`every`âã«å€§ããäŸåããŠã³ã¬ã¯ã·ã§ã³ãæäœããŠããŸããããããããã®å©äŸ¿æ§ã«ã¯éå€§ãªæ³šæç¹ããããŸãããããŒã¿ãé åã§ããããé åã«å€æããã³ã¹ããæ¯æãææããªããã°ãªããªãã£ãã®ã§ãã
ãã®å€æã¹ãããã¯ããã°ãã°`Array.from()`ãã¹ãã¬ããæ§æïŒ`[...]`ïŒã§è¡ãããæ ¹æ¬çãªççŸãçã¿åºããŸããç§ãã¡ãã€ãã¬ãŒã¿ããžã§ãã¬ãŒã¿ã䜿çšããã®ã¯ããŸãã«ãã®ã¡ã¢ãªå¹çãšé å»¶è©äŸ¡ã®ããã§ãããç¹ã«å€§èŠæš¡ãŸãã¯ç¡éã®ããŒã¿ã»ããã§ãã®å©ç¹ã掻ããããŸãã䟿å©ãªã¡ãœããã䜿ãããã ãã«ãã®ããŒã¿ãã¡ã¢ãªäžã®é åã«åŒ·å¶çã«å€æããããšã¯ããããã®æ žãšãªãå©ç¹ãç¡å¹ã«ããããã©ãŒãã³ã¹ã®ããã«ããã¯ãæœåšçãªã¡ã¢ãªãªãŒããŒãããŒãšã©ãŒã«ã€ãªãããŸããããã¯ãŸãã«ãäžžã穎ã«åè§ãæãæã¡èŸŒããããªãã®ã§ãã
ããã§ç»å Žããã®ãã€ãã¬ãŒã¿ãã«ããŒææ¡ã§ããããã¯ãJavaScriptã«ããããã¹ãŠã®å埩å¯èœãªããŒã¿ãšã®å¯Ÿè©±æ¹æ³ãåå®çŸ©ããããšã«ãªãã驿°çãªTC39ã®åãçµã¿ã§ãããã®ææ¡ã¯ã`Iterator.prototype`ã«åŒ·åã§ãã§ã€ã³å¯èœãªäžé£ã®ã¡ãœããã远å ããé åã¡ãœããã®è¡šçŸåãã¡ã¢ãªãªãŒããŒããããªãã§ä»»æã®å埩å¯èœãªãœãŒã¹ã«çŽæ¥ãããããŸããæ¬æ¥ãç§ãã¡ã¯ãã®æ°ããããŒã«ãããããæã圱é¿åã®ããçµç«¯ã¡ãœããã®äžã€ã`Iterator.prototype.every`ã培åºçã«è§£èª¬ããŸãããã®ã¡ãœããã¯æ®éçãªæ€èšŒããŒã«ã§ãããããããå埩å¯èœãªã·ãŒã±ã³ã¹ã®ãã¹ãŠã®èŠçŽ ãç¹å®ã®ã«ãŒã«ã«åŸã£ãŠãããã©ããããã¯ãªãŒã³ã§é«æ§èœããã€ã¡ã¢ãªãæèããæ¹æ³ã§ç¢ºèªããææ®µãæäŸããŸãã
ãã®å æ¬çãªã¬ã€ãã§ã¯ã`every`ã®ä»çµã¿ãå®çšçãªå¿çšäŸããããŠããã©ãŒãã³ã¹ãžã®åœ±é¿ã«ã€ããŠæ¢æ±ããŸããåçŽãªã³ã¬ã¯ã·ã§ã³ãè€éãªãžã§ãã¬ãŒã¿ãããã«ã¯ç¡éã¹ããªãŒã ã§ã®åäœãåæããããå®å šã§å¹ççããã€è¡šçŸåè±ããªJavaScriptãã°ããŒãã«ãªãªãŒãã£ãšã³ã¹ã«åããŠæžãããã®æ°ãããã©ãã€ã ãã©ã®ããã«å¯èœã«ãããã瀺ããŸãã
ãã©ãã€ã ã·ããïŒãªãã€ãã¬ãŒã¿ãã«ããŒãå¿ èŠãªã®ã
`Iterator.prototype.every`ã®ç䟡ãå®å šã«çè§£ããããã«ã¯ããŸãJavaScriptã«ãããã€ãã¬ãŒã·ã§ã³ã®åºæ¬æŠå¿µãšãã€ãã¬ãŒã¿ãã«ããŒã解決ããããã«èšèšãããç¹å®ã®åé¡ãçè§£ããå¿ èŠããããŸãã
ã€ãã¬ãŒã¿ãããã³ã«ïŒç°¡åãªãããã
JavaScriptã®ã€ãã¬ãŒã·ã§ã³ã¢ãã«ã¯ããã®æ žå¿ã«ãããŠåçŽãªå¥çŽã«åºã¥ããŠããŸããiterableïŒå埩å¯èœãªããžã§ã¯ãïŒãšã¯ãã©ã®ããã«ã«ãŒãåŠçãããããå®çŸ©ãããªããžã§ã¯ãã§ãïŒäŸïŒ`Array`ã`String`ã`Map`ã`Set`ïŒãããã¯`[Symbol.iterator]`ã¡ãœãããå®è£ ããããšã«ãã£ãŠè¡ãããŸãããã®ã¡ãœãããåŒã³åºããããšãiteratorïŒã€ãã¬ãŒã¿ïŒãè¿ãããŸããã€ãã¬ãŒã¿ã¯ã`next()`ã¡ãœãããå®è£ ããããšã«ãã£ãŠå€ã®ã·ãŒã±ã³ã¹ãå®éã«çæãããªããžã§ã¯ãã§ãã`next()`ãåŒã³åºããã³ã«ã2ã€ã®ããããã£ãæã€ãªããžã§ã¯ããè¿ãããŸãïŒ`value`ïŒã·ãŒã±ã³ã¹ã®æ¬¡ã®å€ïŒãš`done`ïŒã·ãŒã±ã³ã¹ãå®äºãããšãã«`true`ã«ãªãããŒã«å€ïŒã§ãã
ãã®ãããã³ã«ã¯`for...of`ã«ãŒããã¹ãã¬ããæ§æãåå²ä»£å ¥ãæ¯ããŠããŸãããããããããŸã§ã®èª²é¡ã¯ãã€ãã¬ãŒã¿ãçŽæ¥æäœããããã®ãã€ãã£ãã¡ãœãããäžè¶³ããŠããããšã§ãããããã«ãããäžè¬çã§ã¯ãããã®ã®æé©ãšã¯èšããªã2ã€ã®ã³ãŒãã£ã³ã°ãã¿ãŒã³ãçãŸããŸããã
åŸæ¥ã®æ¹æ³ïŒåé·æ§ vs éå¹çæ§
äžè¬çãªã¿ã¹ã¯ãšããŠããŠãŒã¶ãŒãéä¿¡ããããŒã¿æ§é å ã®ãã¹ãŠã®ã¿ã°ã空ã§ãªãæååã§ããããšãæ€èšŒããå ŽåãèããŠã¿ãŸãããã
ãã¿ãŒã³1ïŒæåã®`for...of`ã«ãŒã
ãã®ã¢ãããŒãã¯ã¡ã¢ãªå¹çã¯è¯ãã§ãããåé·ã§åœä»€çã§ãã
function* getTags() {
yield 'JavaScript';
yield 'WebDev';
yield ''; // ç¡å¹ãªã¿ã°
yield 'Performance';
}
const tagsIterator = getTags();
let allTagsAreValid = true;
for (const tag of tagsIterator) {
if (typeof tag !== 'string' || tag.length === 0) {
allTagsAreValid = false;
break; // æåã§ã·ã§ãŒããµãŒãããããããšãå¿ããªãããã«ããå¿
èŠããããŸã
}
}
console.log(allTagsAreValid); // false
ãã®ã³ãŒãã¯å®ç§ã«åäœããŸãããå®åæãå¿ èŠã§ãããã©ã°å€æ°ãåæåããã«ãŒãæ§é ãæžããæ¡ä»¶ããžãã¯ãå®è£ ãããã©ã°ãæŽæ°ãããããŠéèŠãªããšã«ãäžèŠãªåŠçãé¿ããããã«ã«ãŒãã`break`ããããšãèŠããŠããå¿ èŠããããŸããããã¯èªç¥çãªè² è·ãå¢ãããç§ãã¡ãæãã»ã©å®£èšçã§ã¯ãããŸããã
ãã¿ãŒã³2ïŒéå¹çãªé å倿
ãã®ã¢ãããŒãã¯å®£èšçã§ãããããã©ãŒãã³ã¹ãšã¡ã¢ãªãç ç²ã«ããŸãã
const tagsArray = [...getTags()]; // éå¹çïŒã¡ã¢ãªå
ã«å®å
šãªé
åãäœæããŸãã
const allTagsAreValid = tagsArray.every(tag => typeof tag === 'string' && tag.length > 0);
console.log(allTagsAreValid); // false
ãã®ã³ãŒãã¯ã¯ããã«èªã¿ãããã§ããã倧ããªä»£åã䌎ããŸããã¹ãã¬ããæŒç®å`...`ã¯ããŸãã€ãã¬ãŒã¿å šäœãæ¶è²»ãããã®ãã¹ãŠã®èŠçŽ ãå«ãæ°ããé åãäœæããŸãããã`getTags()`ãæ°çŸäžã®ã¿ã°ãæã€ãã¡ã€ã«ããèªã¿èŸŒãã§ããå Žåãããã¯èšå€§ãªéã®ã¡ã¢ãªãæ¶è²»ããããã»ã¹ãã¯ã©ãã·ã¥ãããå¯èœæ§ããããŸããããã¯ããããããžã§ãã¬ãŒã¿ã䜿çšããç®çãå®å šã«ç¡æå³ã«ããŠããŸããŸãã
ã€ãã¬ãŒã¿ãã«ããŒã¯ãé åã¡ãœããã®å®£èšçãªã¹ã¿ã€ã«ãšçŽæ¥çãªã€ãã¬ãŒã·ã§ã³ã®ã¡ã¢ãªå¹çãšãããäž¡æ¹ã®é·æãæäŸããããšã§ãã®å¯Ÿç«ã解決ããŸãã
ãŠãããŒãµã«æ€èšŒããŒã«ïŒIterator.prototype.everyã®åŸ¹åºè§£èª¬
`every`ã¡ãœããã¯çµç«¯æäœã§ãããã€ãã¬ãŒã¿ãæ¶è²»ããŠåäžã®æçµçãªå€ãçæããããšãæå³ããŸãããã®ç®çã¯ãã€ãã¬ãŒã¿ã«ãã£ãŠçæããããã¹ãŠã®èŠçŽ ããæäŸãããã³ãŒã«ããã¯é¢æ°ã«ãã£ãŠå®è£ ããããã¹ãã«åæ Œãããã©ããããã¹ãããããšã§ãã
æ§æãšãã©ã¡ãŒã¿
ãã®ã¡ãœããã®ã·ã°ããã£ã¯ã`Array.prototype.every`ãæ±ã£ãããšã®ããéçºè ãªã誰ã§ãããã«ãªãããããã«èšèšãããŠããŸãã
iterator.every(callbackFn)
`callbackFn`ã¯æäœã®å¿èéšã§ããããã¯ãæ¡ä»¶ã解決ããããŸã§ã€ãã¬ãŒã¿ã«ãã£ãŠçæãããåèŠçŽ ã«å¯ŸããŠäžåºŠå®è¡ããã颿°ã§ãã2ã€ã®åŒæ°ãåãåããŸãïŒ
- `value`: ã·ãŒã±ã³ã¹å ã§åŠçäžã®çŸåšã®èŠçŽ ã®å€ã
- `index`: çŸåšã®èŠçŽ ã®0ããå§ãŸãã€ã³ããã¯ã¹ã
ã³ãŒã«ããã¯ã®æ»ãå€ãçµæãæ±ºå®ããŸãããtruthyããªå€ïŒ`false`ã`0`ã`''`ã`null`ã`undefined`ã`NaN`以å€ã®å€ïŒãè¿ããå ŽåãèŠçŽ ã¯ãã¹ãã«åæ ŒãããšèŠãªãããŸãããfalsyããªå€ãè¿ããå ŽåãèŠçŽ ã¯äžåæ ŒãšãªããŸãã
æ»ãå€ãšã·ã§ãŒããµãŒããã
`every`ã¡ãœããèªäœã¯åäžã®ããŒã«å€ãè¿ããŸãïŒ
- ããããã®èŠçŽ ã«å¯ŸããŠ`callbackFn`ãfalsyãªå€ãè¿ããšããã«`false`ãè¿ããŸãããããéèŠãªã·ã§ãŒããµãŒãããã®åäœã§ããã€ãã¬ãŒã·ã§ã³ã¯å³åº§ã«åæ¢ãããœãŒã¹ã€ãã¬ãŒã¿ãããã以äžèŠçŽ ãåŒãåºãããããšã¯ãããŸããã
- ã€ãã¬ãŒã¿ãå®å šã«æ¶è²»ããã`callbackFn`ããã¹ãŠã®èŠçŽ ã«å¯ŸããŠtruthyãªå€ãè¿ããå Žåã«`true`ãè¿ããŸãã
ãšããžã±ãŒã¹ãšãã¥ã¢ã³ã¹
- 空ã®ã€ãã¬ãŒã¿ïŒå€ãäžã€ãçæããªãã€ãã¬ãŒã¿ã§`every`ãåŒã³åºããšã©ããªãã§ããããïŒ `true`ãè¿ãããŸãããã®æŠå¿µã¯è«çåŠã§ç©ºèãªçãšããŠç¥ãããŠããŸããããã¹ãŠã®èŠçŽ ããã¹ãã«åæ Œããããšããæ¡ä»¶ã¯ããã¹ãã«äžåæ ŒãªèŠçŽ ãèŠã€ãããªãã£ããããå³å¯ã«ã¯çãšãªããŸãã
- ã³ãŒã«ããã¯å ã®å¯äœçšïŒã·ã§ãŒããµãŒãããã®ãããã³ãŒã«ããã¯é¢æ°ãå¯äœçšïŒäŸïŒãã®ã³ã°ãå€éšå€æ°ã®å€æŽïŒãçããããå Žåã¯æ³šæãå¿ èŠã§ããåæã®èŠçŽ ããã¹ãã«å€±æããå Žåãã³ãŒã«ããã¯ã¯ãã¹ãŠã®èŠçŽ ã«å¯ŸããŠå®è¡ãããŸããã
- ãšã©ãŒãã³ããªã³ã°ïŒãœãŒã¹ã€ãã¬ãŒã¿ã®`next()`ã¡ãœããããšã©ãŒãã¹ããŒããå ŽåããŸãã¯`callbackFn`èªäœããšã©ãŒãã¹ããŒããå Žåã`every`ã¡ãœããã¯ãã®ãšã©ãŒãäŒæããã€ãã¬ãŒã·ã§ã³ã¯åæ¢ããŸãã
å®è·µïŒåçŽãªãã§ãã¯ããè€éãªã¹ããªãŒã ãŸã§
ã°ããŒãã«ãªã¢ããªã±ãŒã·ã§ã³ã§èŠãããããŸããŸãªã·ããªãªãããŒã¿æ§é ã«ããã`Iterator.prototype.every`ã®æ±çšæ§ã匷調ãããäžé£ã®å®çšçãªäŸãéããŠãã®åãæ¢ã£ãŠã¿ãŸãããã
äŸ1ïŒDOMèŠçŽ ã®æ€èšŒ
Webéçºè ã¯ã`document.querySelectorAll()`ã«ãã£ãŠè¿ããã`NodeList`ãªããžã§ã¯ããé »ç¹ã«æ±ããŸããçŸä»£ã®ãã©ãŠã¶ã§ã¯`NodeList`ã¯å埩å¯èœã«ãªã£ãŠããŸãããçã®`Array`ã§ã¯ãããŸããã`every`ã¯ãã®å Žåã«æé©ã§ãã
// HTML:
const formInputs = document.querySelectorAll('form input');
// é
åãäœæããã«ããã¹ãŠã®ãã©ãŒã å
¥åã«å€ãããããã§ãã¯ãã
const allFieldsAreFilled = formInputs.values().every(input => input.value.trim() !== '');
if (allFieldsAreFilled) {
console.log('ãã¹ãŠã®ãã£ãŒã«ããå
¥åãããŸãããéä¿¡æºåå®äºã§ãã');
} else {
console.log('ãã¹ãŠã®å¿
é ãã£ãŒã«ããå
¥åããŠãã ããã');
}
äŸ2ïŒåœéçãªããŒã¿ã¹ããªãŒã ã®æ€èšŒ
ãµãŒããŒãµã€ãã¢ããªã±ãŒã·ã§ã³ããCSVãã¡ã€ã«ãAPIããã®ãŠãŒã¶ãŒç»é²ããŒã¿ã¹ããªãŒã ãåŠçããŠãããšæ³åããŠãã ãããã³ã³ãã©ã€ã¢ã³ã¹äžã®çç±ããããã¹ãŠã®ãŠãŒã¶ãŒã¬ã³ãŒããæ¿èªãããåœã ã®ã»ããã«å±ããŠããããšã確èªããå¿ èŠããããŸãã
const ALLOWED_COUNTRY_CODES = new Set(['US', 'CA', 'GB', 'DE', 'AU']);
// å€§èŠæš¡ãªãŠãŒã¶ãŒã¬ã³ãŒãã®ããŒã¿ã¹ããªãŒã ãã·ãã¥ã¬ãŒããããžã§ãã¬ãŒã¿
function* userRecordStream() {
yield { userId: 1, country: 'US' };
console.log('ãŠãŒã¶ãŒ1ãæ€èšŒããŸãã');
yield { userId: 2, country: 'DE' };
console.log('ãŠãŒã¶ãŒ2ãæ€èšŒããŸãã');
yield { userId: 3, country: 'MX' }; // ã¡ãã·ã³ã¯èš±å¯ãããã»ããã«å«ãŸããŠããŸãã
console.log('ãŠãŒã¶ãŒ3ãæ€èšŒããŸãã - ããã¯ãã°ã«åºåãããŸãã');
yield { userId: 4, country: 'GB' };
console.log('ãŠãŒã¶ãŒ4ãæ€èšŒããŸãã - ããã¯ãã°ã«åºåãããŸãã');
}
const records = userRecordStream();
const allRecordsAreCompliant = records.every(
record => ALLOWED_COUNTRY_CODES.has(record.country)
);
if (allRecordsAreCompliant) {
console.log('ããŒã¿ã¹ããªãŒã ã¯æºæ ããŠããŸãããããåŠçãéå§ããŸãã');
} else {
console.log('ã³ã³ãã©ã€ã¢ã³ã¹ãã§ãã¯ã«å€±æããŸãããã¹ããªãŒã ã«ç¡å¹ãªåœã³ãŒããèŠã€ãããŸããã');
}
ãã®äŸã¯ãã·ã§ãŒããµãŒãããã®åãçŸãã瀺ããŠããŸãããMXãããã®ã¬ã³ãŒãã«ééããç¬éã`every`ã¯`false`ãè¿ãããžã§ãã¬ãŒã¿ã¯ãã以äžããŒã¿ãæ±ããããŸãããããã¯å·šå€§ãªããŒã¿ã»ãããæ€èšŒããäžã§éåžžã«å¹ççã§ãã
äŸ3ïŒç¡éã·ãŒã±ã³ã¹ã®æäœ
é å»¶æäœã®ç䟡ãåãããã®ã¯ãç¡éã·ãŒã±ã³ã¹ãæ±ãããã©ããã§ãã`every`ã¯ãæ¡ä»¶ãæçµçã«å€±æããéããç¡éã·ãŒã±ã³ã¹ã«å¯ŸããŠãæ©èœããŸãã
// ç¡éã®å¶æ°ã·ãŒã±ã³ã¹ãçæãããžã§ãã¬ãŒã¿
function* infiniteEvenNumbers() {
let n = 0;
while (true) {
yield n;
n += 2;
}
}
// ãã¹ãŠã®æ°ã100æªæºã§ããããã§ãã¯ããããšã¯ã§ããŸãããããã¯ç¡éã«å®è¡ãããããã§ãã
// ãããããã¹ãŠãéè² ã§ããããã§ãã¯ããããšã¯ã§ããŸããããã¯çã§ããããããç¡éã«å®è¡ãããŸãã
// ããå®çšçãªãã§ãã¯ïŒã·ãŒã±ã³ã¹å
ã®ããæç¹ãŸã§ã®ãã¹ãŠã®æ°ãæå¹ãïŒ
// `every`ãå¥ã®ã€ãã¬ãŒã¿ãã«ããŒã§ãã`take`ïŒçŸæç¹ã§ã¯ä»®èª¬ã§ãããææ¡ã®äžéšã§ãïŒãšçµã¿åãããŠäœ¿çšããŸãã
// çŽç²ãª`every`ã®äŸã«åºå·ããŸããããå¿
ã倱æããããšãä¿èšŒãããŠããæ¡ä»¶ããã§ãã¯ã§ããŸãã
const numbers = infiniteEvenNumbers();
// ãã®ãã§ãã¯ã¯æçµçã«å€±æããå®å
šã«çµäºããŸãã
const areAllBelow100 = numbers.every(n => n < 100);
console.log(`ç¡éã®å¶æ°ã¯ãã¹ãŠ100æªæºã§ããïŒ ${areAllBelow100}`); // false
ã€ãã¬ãŒã·ã§ã³ã¯0, 2, 4, ...ãš98ãŸã§é²ã¿ãŸãã100ã«éãããšãæ¡ä»¶`100 < 100`ã¯åœã«ãªããŸãã`every`ã¯å³åº§ã«`false`ãè¿ããç¡éã«ãŒããçµäºãããŸããããã¯é åããŒã¹ã®ã¢ãããŒãã§ã¯äžå¯èœã§ãã
Iterator.every vs. Array.everyïŒæŠè¡ç倿ã¬ã€ã
`Iterator.prototype.every`ãš`Array.prototype.every`ã®ã©ã¡ããéžã¶ãã¯ãéèŠãªã¢ãŒããã¯ãã£äžã®æ±ºå®ã§ããéžæã®æéãšãªãå èš³ã以äžã«ç€ºããŸãã
ã¯ã€ãã¯æ¯èŒ
- ããŒã¿ãœãŒã¹ïŒ
- Iterator.every: ä»»æã®iterableïŒé åãæååãMapãSetãNodeListããžã§ãã¬ãŒã¿ãã«ã¹ã¿ã iterableïŒã
- Array.every: é åã®ã¿ã
- ã¡ã¢ãªãããããªã³ãïŒç©ºéèšç®éïŒïŒ
- Iterator.every: O(1) - 宿°ãäžåºŠã«1ã€ã®èŠçŽ ã®ã¿ãä¿æããŸãã
- Array.every: O(N) - ç·åœ¢ãé åå šäœãã¡ã¢ãªã«ååšããå¿ èŠããããŸãã
- è©äŸ¡ã¢ãã«ïŒ
- Iterator.every: é å»¶ãã«ãå¿ èŠã«å¿ããŠå€ãäžã€ãã€æ¶è²»ããŸãã
- Array.every: 峿ãå®å šã«å ·äœåãããã³ã¬ã¯ã·ã§ã³ã«å¯ŸããŠæäœããŸãã
- äž»ãªãŠãŒã¹ã±ãŒã¹ïŒ
- Iterator.every: å€§èŠæš¡ãªããŒã¿ã»ãããããŒã¿ã¹ããªãŒã ãã¡ã¢ãªã«å¶çŽã®ããç°å¢ãããã³ä»»æã®æ±çšiterableã«å¯Ÿããæäœã
- Array.every: ãã§ã«é å圢åŒã«ãªã£ãŠããå°ãäžèŠæš¡ã®ããŒã¿ã»ããã
ã·ã³ãã«ãªæææ±ºå®ããªãŒ
ã©ã¡ãã®ã¡ãœããã䜿çšããããæ±ºå®ããã«ã¯ã以äžã®è³ªåãèªåããŠãã ããïŒ
- ããŒã¿ã¯ãã§ã«é
åã§ããïŒ
- ã¯ãïŒé åãã¡ã¢ãªãæžå¿µããã»ã©å€§ããã§ããïŒ ããã§ãªããã°ã`Array.prototype.every`ã¯å®å šã«åé¡ãªãããã°ãã°ããã·ã³ãã«ã§ãã
- ãããïŒæ¬¡ã®è³ªåã«é²ãã§ãã ããã
- ããŒã¿ãœãŒã¹ã¯é
å以å€ã®iterableïŒäŸïŒSetããžã§ãã¬ãŒã¿ãã¹ããªãŒã ïŒã§ããïŒ
- ã¯ãïŒ`Iterator.prototype.every`ãçæ³çãªéžæã§ãã`Array.from()`ã®ããã«ãã£ãé¿ããŠãã ããã
- ãã®æäœã«ãããŠã¡ã¢ãªå¹çã¯éèŠãªèŠä»¶ã§ããïŒ
- ã¯ãïŒããŒã¿ãœãŒã¹ã«é¢ãããã`Iterator.prototype.every`ãåªããéžæè¢ã§ãã
æšæºåãžã®éïŒãã©ãŠã¶ãšã©ã³ã¿ã€ã ã®ãµããŒã
2023幎åŸåçŸåšãã€ãã¬ãŒã¿ãã«ããŒææ¡ã¯TC39æšæºåããã»ã¹ã®ã¹ããŒãž3ã«ãããŸããã¹ããŒãž3ã¯ãåè£ïŒCandidateïŒãã¹ããŒãžãšããŠãç¥ãããææ¡ã®èšèšãå®äºãããã©ãŠã¶ãã³ããŒã«ããå®è£ ãšãããåºç¯ãªéçºã³ãã¥ããã£ããã®ãã£ãŒãããã¯ãåŸ ã€æºåãæŽã£ãããšãæå³ããŸããä»åŸã®ECMAScriptæšæºïŒäŸïŒES2024ãŸãã¯ES2025ïŒã«å«ãŸããå¯èœæ§ãéåžžã«é«ãã§ãã
çŸåšãã¹ãŠã®ãã©ãŠã¶ã§`Iterator.prototype.every`ããã€ãã£ãã«å©çšã§ããããã§ã¯ãããŸããããå ç¢ãªJavaScriptãšã³ã·ã¹ãã ãéããŠãã®åãããã«æŽ»çšãå§ããããšãã§ããŸãïŒ
- ããªãã£ã«ïŒå°æ¥ã®æ©èœã䜿çšããæãäžè¬çãªæ¹æ³ã¯ããªãã£ã«ã§ããJavaScriptã®ããªãã£ã«ã®æšæºã§ãã`core-js`ã©ã€ãã©ãªã¯ãã€ãã¬ãŒã¿ãã«ããŒææ¡ã®ãµããŒããå«ãã§ããŸããããããããžã§ã¯ãã«å«ããããšã§ãæ°ããæ§æããã€ãã£ãã«ãµããŒããããŠãããã®ããã«äœ¿çšã§ããŸãã
- ãã©ã³ã¹ãã€ã©ïŒBabelã®ãããªããŒã«ã¯ãç¹å®ã®ãã©ã°ã€ã³ã§èšå®ããããšã§ãæ°ããã€ãã¬ãŒã¿ãã«ããŒæ§æããå€ãJavaScriptãšã³ãžã³ã§å®è¡å¯èœãªåçã®åŸæ¹äºææ§ã®ããã³ãŒãã«å€æã§ããŸãã
ææ¡ã®ã¹ããŒã¿ã¹ããã©ãŠã¶ã®äºææ§ã«é¢ããææ°æ å ±ã«ã€ããŠã¯ãGitHubã§ãTC39 Iterator Helpers proposalããæ€çŽ¢ããããMDN Web Docsã®ãããªWebäºææ§ãªãœãŒã¹ãåç §ããããšããå§ãããŸãã
çµè«ïŒå¹ççã§è¡šçŸåè±ããªããŒã¿åŠçã®æ°æä»£
`Iterator.prototype.every`ãšãããåºç¯ãªã€ãã¬ãŒã¿ãã«ããŒçŸ€ã®è¿œå ã¯ãåãªãæ§æäžã®å©äŸ¿æ§ä»¥äžã®ãã®ã§ãããJavaScriptã®ããŒã¿åŠçèœåã«å¯Ÿããæ ¹æ¬çãªåŒ·åã§ããããã¯èšèªã«é·å¹ŽååšããŠããã®ã£ãããåããéçºè ãåæã«ãã衚çŸåè±ãã§ããã髿§èœããããŠåçã«ã¡ã¢ãªå¹çã®è¯ãã³ãŒããæžãããšãå¯èœã«ããŸãã
ä»»æã®å埩å¯èœãªã·ãŒã±ã³ã¹ã«å¯ŸããŠæ®éçãªæ¡ä»¶ãã§ãã¯ãå®è¡ããããã®ç¬¬äžçŽã®å®£èšçãªæ¹æ³ãæäŸããããšã§ã`every`ã¯äžæ Œå¥œãªæåã«ãŒããç¡é§ãªäžéé åã®å²ãåœãŠã®å¿ èŠæ§ãæé€ããŸãããªã¢ã«ã¿ã€ã ã®ããŒã¿ã¹ããªãŒã ã®åŠçãããµãŒããŒã§ã®å€§èŠæš¡ããŒã¿ã»ããã®åŠçãŸã§ãçŸä»£ã®ã¢ããªã±ãŒã·ã§ã³éçºã®èª²é¡ã«é©ãã颿°åããã°ã©ãã³ã°ã®ã¹ã¿ã€ã«ãä¿é²ããŸãã
ãã®æ©èœããã¹ãŠã®ã°ããŒãã«ãªç°å¢ã§JavaScriptæšæºã®ãã€ãã£ããªäžéšãšãªãã«ã€ããŠãééããªãäžå¯æ¬ ãªããŒã«ã«ãªãã§ãããã仿¥ããããªãã£ã«ãä»ããŠå®éšãå§ããããšããå§ãããŸããã³ãŒãããŒã¹å ã§äžå¿ èŠã«iterableãé åã«å€æããŠããç®æãç¹å®ãããã®æ°ããã¡ãœãããã©ã®ããã«ããžãã¯ãç°¡çŽ åããæé©åã§ãããã確èªããŠãã ãããJavaScriptã®ã€ãã¬ãŒã·ã§ã³ã«ããããããã¯ãªãŒã³ã§ãããéããããã¹ã±ãŒã©ãã«ãªæªæ¥ãžããããã